﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/


namespace Xceed.Silverlight.Data
{
  internal static class ParametersExtensions
  {
    internal static JumpMoveAndFetchParameters CreateWithNewSourcePosition( this JumpMoveAndFetchParameters source, SourcePosition sourcePosition )
    {
      if( source.SourcePosition == sourcePosition )
        return source;

      return new JumpMoveAndFetchParameters(
        sourcePosition,
        source.ExpectedMoveCount,
        source.ExpectedFetchCount,
        source.ApproximateMove,
        source.Context );
    }

    internal static JumpMoveAndFetchParameters CreateWithNewMoveCount( this JumpMoveAndFetchParameters source, long expectedMoveCount )
    {
      if( source.ExpectedMoveCount == expectedMoveCount )
        return source;

      return new JumpMoveAndFetchParameters(
        source.SourcePosition,
        expectedMoveCount,
        source.ExpectedFetchCount,
        source.ApproximateMove,
        source.Context );
    }

    internal static JumpMoveAndFetchParameters CreateWithNewFetchCount( this JumpMoveAndFetchParameters source, int expectedFetchCount )
    {
      if( source.ExpectedFetchCount == expectedFetchCount )
        return source;

      return new JumpMoveAndFetchParameters(
        source.SourcePosition,
        source.ExpectedMoveCount,
        expectedFetchCount,
        source.ApproximateMove,
        source.Context );
    }

    internal static JumpMoveAndFetchParameters CreateWithNewApproximateMoving( this JumpMoveAndFetchParameters source, bool approximateMove )
    {
      if( source.ApproximateMove == approximateMove )
        return source;

      return new JumpMoveAndFetchParameters(
        source.SourcePosition,
        source.ExpectedMoveCount,
        source.ExpectedFetchCount,
        approximateMove,
        source.Context );
    }

    internal static JumpMoveAndFetchParameters CreateWithNewContext( this JumpMoveAndFetchParameters source, DataSourceContext context )
    {
      if( source.Context == context )
        return source;

      return new JumpMoveAndFetchParameters(
        source.SourcePosition,
        source.ExpectedMoveCount,
        source.ExpectedFetchCount,
        source.ApproximateMove,
        context );
    }

    internal static PeekParameters CreateWithNewContext( this PeekParameters source, DataSourceContext context )
    {
      if( source.Context == context )
        return source;

      return new PeekParameters(
        source.SourcePosition,
        source.ExpectedSkipCount,
        source.ExpectedPeekCount,
        source.ApproximateSkip,
        context );
    }

    internal static JumpMoveAndFetchParameters ConvertToJumpMoveAndFetchParameters( this PeekParameters source )
    {
      return new JumpMoveAndFetchParameters(
        source.SourcePosition,
        source.ExpectedSkipCount,
        source.ExpectedPeekCount,
        source.ApproximateSkip,
        source.Context );
    }
  }
}
